#ifndef USB_SERVER_WRAPPER_H
#define USB_SERVER_WRAPPER_H

#include <cstdint>
#include "libdaq/utils/wrapper_util.h"

#ifdef __cplusplus
extern "C" {
#endif

enum DeviceType
{
  DeviceType_DAQ217,
  DeviceType_DAQ216,
  DeviceType_DAQ207,
  DeviceType_DAQ206,
  DeviceType_DAQ125,
  DeviceType_DAQ322,
};

/**
 * 创建USB服务器实例
 * @param device_type 设备类型
 * @return USB服务器句柄
 */
DLL_EXPORT uint32_t* CALL_FUNCTION USBServer_New(uint32_t device_type);

/**
 * 删除USB服务器实例
 * @param handle USB服务器句柄
 */
DLL_EXPORT void CALL_FUNCTION USBServer_Delete(uint32_t* handle);

/**
 * 开始搜索设备
 * @param handle USB服务器句柄
 */
DLL_EXPORT void CALL_FUNCTION USBServer_StartSearch(uint32_t* handle);

/**
 * 获取总线号列表
 * @param handle USB服务器句柄
 * @param bus_count 总线数量（输出参数）
 * @return 总线号数组
 */
DLL_EXPORT uint32_t* CALL_FUNCTION USBServer_GetBusNumbers(uint32_t* handle, uint8_t* bus_count);

/**
 * 获取指定总线上的设备地址列表
 * @param handle USB服务器句柄
 * @param bus_number 总线号
 * @param device_count 设备数量（输出参数）
 * @return 设备地址数组
 */
DLL_EXPORT uint32_t* CALL_FUNCTION USBServer_GetDeviceAddresses(uint32_t* handle, uint8_t bus_number, uint8_t* device_count);

/**
 * 获取指定总线和设备地址的客户端
 * @param handle USB服务器句柄
 * @param bus_number 总线号
 * @param device_address 设备地址
 * @return 客户端句柄
 */
DLL_EXPORT uint32_t* CALL_FUNCTION USBServer_GetClient(uint32_t* handle, uint8_t bus_number, uint8_t device_address);

/**
 * 根据索引获取客户端
 * @param handle USB服务器句柄
 * @param device_index 设备索引
 * @return 客户端句柄
 */
DLL_EXPORT uint32_t* CALL_FUNCTION USBServer_GetClientByIndex(uint32_t* handle, uint32_t device_index);

/**
 * 获取设备总数
 * @param handle USB服务器句柄
 * @return 设备总数
 */
DLL_EXPORT uint32_t CALL_FUNCTION USBServer_GetDeviceCount(uint32_t* handle);

#ifdef __cplusplus
}
#endif

#endif // USB_SERVER_WRAPPER_H 